package review.Day_0403;

import LimitedTimeGame.Day_0326.night.List;

/**
 * @author zxc
 * @date 2023/04/04 16:26
 **/
public class Solution02 {
    // 思路 ：即，使用链表来实现循环队列

    // 链表头节点，指向循环队列的队首元素;
    ListNode head;
    // 链表尾系欸但，指向循环队列的队尾元素;
    ListNode tail;
    // 统计当前循环队列中元素数量
    int size;
    // 记录循环队列的最大容量;
    int maxCapacity;
    // 初始化操作 ：
    public Solution02(int k) {
        size = 0;
        maxCapacity = k;
    }
    // 向循环队列中插入元素 ：
    public boolean enQueue(int value) {
        // 将所要插入的元素封装成 node链表节点;
        ListNode node = new ListNode(value);
        // 1.链表为空的情况 ：
        if(isEmpty()){
            head = node;
            tail = node;
            size++;
            return true;
        }
        // 2.链表已经达到最大容量的情况 ：
        else if(isFull()){
            return false;
        }
        // 3.链表不为空 && 链表也未到达最大容量maxCapacity（即，代表了还能够向该链表中插入元素）
        else {
            // 链表节点node，添加到当前链表尾部;
            tail.next = node;
            // tail链表尾节点，指向新添加到链表尾部的节点node;
            tail = node;
            size++;
            return true;
        }

    }
    // 删除循环队列中的队首元素 ：
    public boolean deQueue() {
        if(isEmpty()){
            return false;
        }
        // 删除链表头结点
        ListNode next = head.next;
        head.next = null;
        head = next;
        size--;
        return true;
    }
    // 获取当前链表的头元素 ：
    public int Front() {
        if(isEmpty()){
            return -1;
        }
        return head.value;
    }
    // 获取当前链表的尾元素 ：
    public int Rear() {
        if(isEmpty()){
            return -1;
        }
        return tail.value;
    }
    // 判断当前链表是否为空
    public boolean isEmpty() {
        if(size == 0){
            return true;
        }
        return false;
    }
    // 判断当前链表是否已满
    public boolean isFull() {
        if(size == maxCapacity){
            return true;
        }
        return false;
    }
    class ListNode{
        int value;
        ListNode next;
        public ListNode(){};
        public ListNode(int value){
            this.value = value;
        }
    }
}
